home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD ROM Paradise Collection 4
/
CD ROM Paradise Collection 4 1995 Nov.iso
/
program
/
swagd_f.zip
/
FILES.SWG
/
0024_Faster File Exists.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1993-08-27
|
2KB
|
75 lines
{
SEAN PALMER
I just ran some timings, which are gonna be affected by SMARTDRV.EXE
being loaded, but I took that into account (ran multiple times on same
file, and took timings on second/subsequent runs, to make sure always
got cache hits)
What I got was that FileExists below and my modified version of that
fileExist3 function that's been floating around this echo for a while
(no bug) both run neck and neck... it's amazing... both are slightly
faster than FileExist2 and lots lots faster than the 'reset,
fileExist=(ioresult=0)' type thing that most people still seem to use...
I'd recommend using the first one below as it's really short...
}
uses
dos;
{ Tied for fastest }
function fileExists(var s : string) : boolean;
begin
fileExists := fSearch(s, '') <> '';
end;
{ 2nd }
function fileExist2(var s : string) : boolean;
var
r : searchrec;
begin
findfirst(s, anyfile, r);
fileExist2 := (dosError = 0);
end;
{ Tied for fastest }
function fileExist3(var s : string) : boolean; assembler;
asm
push ds
lds si, s { need to make ASCIIZ }
cld
lodsb { get length; si now points to first char }
xor ah, ah
mov bx, ax
mov al, [si+bx] { save byte before placing terminating null }
push ax
mov byte ptr [si+bx],0
mov dx, si
mov ax, $4300 { get file attributes }
int $21
mov al, 1 { if carry set, fail }
pop dx
mov [si+bx], dl { restore byte }
pop ds
end;
{ Slowest }
function fileExist4(var s : string) : boolean;
var
f : file;
begin
assign(f,s);
{$I-}
reset(f);
{$I+}
if ioresult = 0 then
begin
close(f);
fileExist4 := true;
end
else
fileExist4 := false;
end;